package com.ado.agea.datos;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Map;
import java.util.logging.Logger;

public class SqlCreator extends Colecciones {

	private static String archivo = "migracionv1.0.4.8.sql";

	public static String crearInsert(Map<String, Map> datos, String tabla) {
		if (datos.isEmpty()) {
			Logger.getLogger("SqlCreator error").info("mapa " + tabla + " vacio");
			return "";
		}

		int cont = 0;
		boolean cabecera = true;
		StringBuilder sb;
		sb = new StringBuilder();

		for (String key : datos.keySet()) {
			Map<String, String> fila = datos.get(key);
			if (cabecera) {
				crearCabecera(sb, fila, tabla);
				cabecera = false;
			}
			sb.append("\n(");
			for (String clave : fila.keySet()) {
				sb.append((fila.get(clave) == null) ? " NULL," : " '" + fila.get(clave).replace("'", "''") + "',");
			}
			sb.deleteCharAt(sb.length() - 1);
			sb.append("),");
		}
		sb.deleteCharAt(sb.length() - 1);
		sb.append(";");
		return sb.toString();
	}

	private static void crearCabecera(StringBuilder sb, Map<String, String> fila, String tabla) {
		sb.append("\nINSERT INTO `" + tabla + "` (");
		for (String columna : fila.keySet()) {
			sb.append("`" + columna + "`,");
		}
		sb.deleteCharAt(sb.length() - 1);
		sb.append(") VALUES ");
	}

	public static String generarSql() {
		StringBuilder sb = new StringBuilder();
		sb.append("TRUNCATE `gastos_usr`;\n"
				+ "TRUNCATE `beneficios_usr`;\n"
				+ "TRUNCATE `relaciones_usr`;\n"
				+ "TRUNCATE `conceptos_usr`;\n"
				+ "TRUNCATE `modelos_usr`;\n"
				+ "TRUNCATE `fotos_usr`;\n"
				+ "TRUNCATE `gastos_modelo`;\n" 
				+ "TRUNCATE `beneficios_modelo`;\n"
				+ "TRUNCATE `relaciones_modelos`;\n"
				+ "TRUNCATE `conceptos_modelos`;\n"
				+ "TRUNCATE `modelos`;\n"
				+ "TRUNCATE `relaciones_maestros`;\n"
				+ "TRUNCATE `conceptos_maestros`;\n"
				+ "TRUNCATE `familias`;\n"
				+ "TRUNCATE `unidades`;\n");
		sb.append(SqlCreator.crearInsert(unidades, "unidades"));
		sb.append(SqlCreator.crearInsert(familias, "familias"));
		sb.append(SqlCreator.crearInsert(conceptosMaestros, "conceptos_maestros"));
		sb.append(SqlCreator.crearInsert(relacionesMaestros, "relaciones_maestros"));
		sb.append(SqlCreator.crearInsert(modelos, "modelos"));
		sb.append(SqlCreator.crearInsert(conceptos, "conceptos_modelos"));
		sb.append(SqlCreator.crearInsert(relaciones, "relaciones_modelos"));
		sb.append(SqlCreator.crearInsert(beneficios, "beneficios_modelo"));
		crearArchivoSQL(archivo, sb.toString());
		return sb.toString();
	}

	public static void crearArchivoSQL(String file, String sql) {
		File f = new File(file);
		try {
			PrintWriter pw = new PrintWriter(f);
			pw.print(sql);
			pw.flush();
			pw.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}
